package com.wang.project.config;

import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * Redisson限流配置
 */
@Configuration
public class RedissonConfig {

    @Resource
    private RedissonClient redissonClient;

    @Bean
    public RRateLimiter rateLimiter() {
        RRateLimiter rateLimiter = redissonClient.getRateLimiter("myRateLimiter");
        // 设置每秒允许的请求数量
        /**
         * RateType: 限流类型。RateType.OVERALL表示整体速率限制，即对所有请求进行限制。
         * 10: 每个时间窗口内允许的请求数量。这里设置为10表示每秒最多允许处理10个请求。
         * 1: 时间窗口的长度。这里设置为1表示时间窗口的长度为1个时间单位。
         * RateIntervalUnit.SECONDS: 时间单位。这里使用秒作为时间单位。
         */
        rateLimiter.trySetRate(RateType.OVERALL, 10, 1, RateIntervalUnit.SECONDS);
        return rateLimiter;
    }
}